home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / nss / certi.h < prev    next >
C/C++ Source or Header  |  2006-04-20  |  9KB  |  248 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Netscape security libraries.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 1994-2000
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36. /*
  37.  * certi.h - private data structures for the certificate library
  38.  *
  39.  * $Id: certi.h,v 1.16 2005/04/17 03:17:06 julien.pierre.bugs%sun.com Exp $
  40.  */
  41. #ifndef _CERTI_H_
  42. #define _CERTI_H_
  43.  
  44. #include "certt.h"
  45. #include "nssrwlkt.h"
  46.  
  47. /*
  48. #define GLOBAL_RWLOCK 1
  49. */
  50.  
  51. #define DPC_RWLOCK 1
  52.  
  53. /* all definitions in this file are subject to change */
  54.  
  55. typedef struct OpaqueCRLFieldsStr OpaqueCRLFields;
  56. typedef struct CRLEntryCacheStr CRLEntryCache;
  57. typedef struct CRLDPCacheStr CRLDPCache;
  58. typedef struct CRLIssuerCacheStr CRLIssuerCache;
  59. typedef struct CRLCacheStr CRLCache;
  60. typedef struct CachedCrlStr CachedCrl;
  61.  
  62. struct OpaqueCRLFieldsStr {
  63.     PRBool partial;
  64.     PRBool decodingError;
  65.     PRBool badEntries;
  66.     PRBool badDER;
  67.     PRBool badExtensions;
  68.     PRBool heapDER;
  69. };
  70.  
  71. typedef struct PreAllocatorStr PreAllocator;
  72.  
  73. struct PreAllocatorStr
  74. {
  75.     PRSize len;
  76.     void* data;
  77.     PRSize used;
  78.     PRArenaPool* arena;
  79.     PRSize extra;
  80. };
  81.  
  82. /*  CRL entry cache.
  83.     This is the same as an entry plus the next/prev pointers for the hash table
  84. */
  85.  
  86. struct CRLEntryCacheStr {
  87.     CERTCrlEntry entry;
  88.     CRLEntryCache *prev, *next;
  89. };
  90.  
  91. #define CRL_CACHE_INVALID_CRLS              0x0001 /* this state will be set
  92.         if we have CRL objects with an invalid DER or signature. Can be
  93.         cleared if the invalid objects are deleted from the token */
  94. #define CRL_CACHE_LAST_FETCH_FAILED         0x0002 /* this state will be set
  95.         if the last CRL fetch encountered an error. Can be cleared if a
  96.         new fetch succeeds */
  97.  
  98. #define CRL_CACHE_OUT_OF_MEMORY             0x0004 /* this state will be set
  99.         if we don't have enough memory to build the hash table of entries */
  100.  
  101. typedef enum {
  102.     CRL_OriginToken = 0,    /* CRL came from PKCS#11 token */
  103.     CRL_OriginExplicit = 1  /* CRL was explicitly added to the cache, from RAM */
  104. } CRLOrigin;
  105.  
  106. struct CachedCrlStr {
  107.     CERTSignedCrl* crl;
  108.     CRLOrigin origin;
  109.     /* hash table of entries. We use a PLHashTable and pre-allocate the
  110.        required amount of memory in one shot, so that our allocator can
  111.        simply pass offsets into it when hashing.
  112.  
  113.        This won't work anymore when we support delta CRLs and iCRLs, because
  114.        the size of the hash table will vary over time. At that point, the best
  115.        solution will be to allocate large CRLEntry structures by modifying
  116.        the DER decoding template. The extra space would be for next/prev
  117.        pointers. This would allow entries from different CRLs to be mixed in
  118.        the same hash table.
  119.     */
  120.     PLHashTable* entries;
  121.     PreAllocator* prebuffer; /* big pre-allocated buffer mentioned above */
  122.     PRBool sigChecked; /* this CRL signature has already been checked */
  123.     PRBool sigValid; /* signature verification status .
  124.                      Only meaningful if checked is PR_TRUE . */
  125. };
  126.  
  127. /*  CRL distribution point cache object
  128.     This is a cache of CRL entries for a given distribution point of an issuer
  129.     It is built from a collection of one full and 0 or more delta CRLs.
  130. */
  131.  
  132. struct CRLDPCacheStr {
  133. #ifdef DPC_RWLOCK
  134.     NSSRWLock* lock;
  135. #else
  136.     PRLock* lock;
  137. #endif
  138.     CERTCertificate* issuer;    /* cert issuer 
  139.                                    XXX there may be multiple issuer certs,
  140.                                        with different validity dates. Also
  141.                                        need to deal with SKID/AKID . See
  142.                                        bugzilla 217387, 233118 */
  143.     SECItem* subject;           /* DER of issuer subject */
  144.     SECItem* distributionPoint; /* DER of distribution point. This may be
  145.                                    NULL when distribution points aren't
  146.                                    in use (ie. the CA has a single CRL).
  147.                                    Currently not used. */
  148.  
  149.     /* array of full CRLs matching this distribution point */
  150.     PRUint32 ncrls;              /* total number of CRLs in crls */
  151.     CachedCrl** crls;            /* array of all matching CRLs */
  152.     /* XCRL With iCRLs and multiple DPs, the CRL can be shared accross several
  153.        issuers. In the future, we'll need to globally recycle the CRL in a
  154.        separate list in order to avoid extra lookups, decodes, and copies */
  155.  
  156.     /* pointers to good decoded CRLs used to build the cache */
  157.     CachedCrl* selected;    /* full CRL selected for use in the cache */
  158. #if 0
  159.     /* for future use */
  160.     PRInt32 numdeltas;      /* number of delta CRLs used for the cache */
  161.     CachedCrl** deltas;     /* delta CRLs used for the cache */
  162. #endif
  163.     /* cache invalidity bitflag */
  164.     PRUint16 invalid;       /* this state will be set if either
  165.              CRL_CACHE_INVALID_CRLS or CRL_CACHE_LAST_FETCH_FAILED is set.
  166.              In those cases, all certs are considered revoked as a
  167.              security precaution. The invalid state can only be cleared
  168.              during an update if all error states are cleared */
  169.     PRBool refresh;        /* manual refresh from tokens has been forced */
  170.     PRBool mustchoose;     /* trigger reselection algorithm, for case when
  171.                               RAM CRL objects are dropped from the cache */
  172.     PRTime lastfetch;      /* time a CRL token fetch was last performed */
  173.     PRTime lastcheck;      /* time CRL token objects were last checked for
  174.                               existence */
  175. };
  176.  
  177. /*  CRL issuer cache object
  178.     This object tracks all the distribution point caches for a given issuer.
  179.     XCRL once we support multiple issuing distribution points, this object
  180.     will be a hash table. For now, it just holds the single CRL distribution
  181.     point cache structure.
  182. */
  183.  
  184. struct CRLIssuerCacheStr {
  185.     SECItem* subject;           /* DER of issuer subject */
  186.     CRLDPCache* dpp;
  187. #if 0
  188.     /* XCRL for future use.
  189.        We don't need to lock at the moment because we only have one DP,
  190.        which gets created at the same time as this object */
  191.     NSSRWLock* lock;
  192.     CRLDPCache** dps;
  193.     PLHashTable* distributionpoints;
  194.     CERTCertificate* issuer;
  195. #endif
  196. };
  197.  
  198. /*  CRL revocation cache object
  199.     This object tracks all the issuer caches
  200. */
  201.  
  202. struct CRLCacheStr {
  203. #ifdef GLOBAL_RWLOCK
  204.     NSSRWLock* lock;
  205. #else
  206.     PRLock* lock;
  207. #endif
  208.     /* hash table of issuer to CRLIssuerCacheStr,
  209.        indexed by issuer DER subject */
  210.     PLHashTable* issuers;
  211. };
  212.  
  213. SECStatus InitCRLCache(void);
  214. SECStatus ShutdownCRLCache(void);
  215.  
  216. /* Returns a pointer to an environment-like string, a series of
  217. ** null-terminated strings, terminated by a zero-length string.
  218. ** This function is intended to be internal to NSS.
  219. */
  220. extern char * cert_GetCertificateEmailAddresses(CERTCertificate *cert);
  221.  
  222. /*
  223.  * These functions are used to map subjectKeyID extension values to certs.
  224.  */
  225. SECStatus
  226. cert_CreateSubjectKeyIDHashTable(void);
  227.  
  228. SECStatus
  229. cert_AddSubjectKeyIDMapping(SECItem *subjKeyID, CERTCertificate *cert);
  230.  
  231. /*
  232.  * Call this function to remove an entry from the mapping table.
  233.  */
  234. SECStatus
  235. cert_RemoveSubjectKeyIDMapping(SECItem *subjKeyID);
  236.  
  237. SECStatus
  238. cert_DestroySubjectKeyIDHashTable(void);
  239.  
  240. SECItem*
  241. cert_FindDERCertBySubjectKeyID(SECItem *subjKeyID);
  242.  
  243. /* return maximum length of AVA value based on its type OID tag. */
  244. extern int cert_AVAOidTagToMaxLen(SECOidTag tag);
  245.  
  246. #endif /* _CERTI_H_ */
  247.  
  248.